iT邦幫忙

2024 iThome 鐵人賽

DAY 3
3

https://ithelp.ithome.com.tw/upload/images/20240917/20118848rXFURqtPNV.png

Graylog 作為一個能夠收容多種記錄資料的收集器,內建許多種類型的記錄輸入器 (Input) 提供我們選擇,依據要接收的記錄類型建立出多種對應的輸入器,以便將記錄放置到正確的處理程序。


輸入器類型

在 Graylog 當中輸入器分為兩種:

  1. 監聽輸入器 (Listener Input)
    這類型的輸入器會在 Graylog 建立一個監聽連接埠,等待來源裝置將記錄傳送過來。協定可以選用 TCP/UDP,TCP 可以確保資料正確傳送接收,UDP 則可以提供高速的傳輸效率但沒有確保一定能正確接收。

  2. 拉取輸入器 (Pull Input)
    此類型的輸入是由 Graylog 主動連到遠端裝置,以 API 或其它方方式將資料擷取回來。在大部份的情況下,拉取資料需要以身份認證連接至遠端裝置,甚至可能需要採用 HTTPS 加密連現與可信任的憑證。

以下列出 Graylog Open 當中最常使用的幾種輸入器:

  • Syslog TCP/UDP
  • CEF TCP/UDP
  • GELF TCP/UDP
  • Raw/Plaintext TCP/UDP

建立 Syslog 輸入器

Syslog 是最常見的一種記錄格式,Graylog 可以接收 RFC 5424RFC 3164,在大多數的 Linux、BSD 作業系統內建的 rsyslog 或 syslog-ng 都可以正確支援。而常見的網路裝置也都支援 Syslog 格式,例如防火牆、交換器、路由器等等。

以下是一段符合 RFC 5424 標準的 Syslog 記錄內容:

<27>1 2024-09-17T20:44:12.925182+08:00 router-003.jason.tools dhcp6c 8071 - - transmit failed: Permission denied

要建立 Syslog 輸入器,請由功能表選擇 System (1) -> Inputs (2),接著在左邊的下拉清單中選擇 Syslog UDP (3),最後按下 Lanuch new input (4)。

https://ithelp.ithome.com.tw/upload/images/20240917/20118848Ixqq2QFXNI.png
選擇 Syslog UDP

進到 Syslog UDP 輸入器設定畫面,以下有幾個需要設定的欄位:

  • Global:
    建議勾選,日後若建立為叢集模式後可以省下一些步驟。

  • Title:
    設定這個輸入器名稱,我個人的命名習慣為 syslog_udp_30414。以底線分隔,第一欄是格式,第二欄協定,第三欄連接埠號,以後在檢視的時候就會清楚易懂。

  • Bind address:
    要在那一個 IP 上監聽,預設 0.0.0.0 表示監聽 Graylog 伺服器所有的 IP。

  • Port:
    要在那一個 Port 上監聽,請使用 1024 以上的數字,我個人習慣採用 30514。

https://ithelp.ithome.com.tw/upload/images/20240917/20118848d7DY6hizOx.png
設定 Syslog UDP

下方還有一些欄位,保持預設值即可,最後按下 Lanuch Input 後即是建立完成,回到輸入器清單後會多出一筆 syslog_udp_30514 的輸入資訊區塊。

https://ithelp.ithome.com.tw/upload/images/20240917/20118848Osa07T8TNi.png
建立 Syslog UDP 完成

如果 Syslog UDP 輸入器正常監聽,會在名稱的後方顯示綠色區塊 1 RUNNING 的字樣表示正常,若顯示為橘色區塊 0 RUNNING 表示沒有正確啟動,通常原因是該連接埠已經被其它程式佔用,需要更換連接埠或將原本佔用的程式結束。

在右邊有一個 Network IO 的欄位,後方的數字會顯示最近每秒所收到的記錄容量,若確認有對這個輸入器傳送記錄但是數字沒有變化,需要檢查中間的網路連線狀況、網路設定,或者防火牆阻擋。

在數字後方的 total 則是顯示統計容量,它會記錄從這個輸入器啟動以來所收到的所有記錄容量進行統計,若輸入器有重新啟動過數字會歸零重新統計。

注意:

某些網路裝置宣稱可以傳送 syslog 的記錄,但實際上它並未符合上述兩種 RFC 標準,若傳送至 Syslog 輸入器將會因格式不符而被丟棄。這類型的裝置要改為傳送至稍後會介紹的 Raw/Plaintext 輸入器。


建立 CEF 輸入器

CEF (Common Event Format) 是經過擴充的記錄格式,它定義了語法、標頭以及最重要的 key-value 鍵值組合的格式,這種 key-value 格式可以讓 Log 伺服器正確的拆解出不同的欄位,省去 Syslog 格式在接收後還需要自行拆解欄位的工作。

在許多網路裝置 (尤其是防火牆) 都有支援 CEF 格式的傳送,例如 Palo Alto Networks 防火牆、Fortinet 防火牆、Check Point 防火牆...等等。因此,若您的網路裝置有支援 CEF 格式,請選擇 CEF 傳送會優於 Syslog。

以下是一段符合 CEF 格式的記錄內容:

Feb 29 15:47:25 10.0.1.43 CEF: 0|PATownsend|IBM-QAUDJRN|1.28|1007|CO-Create object|4|msg=CO-Create object act=N-Create of new object actual_type=CO-N jrn_seq=102361 timestamp=20120229154725823000 dproc=ICC suser=MVAGANEK job_number=638012 eff_user=MVAGANEK object=X_BIGNUM object_library=ICAPITST object_type=*MODULE object_attrCLE

要建立 CEF 輸入器,請在輸入器管理頁左邊的下拉清單中選擇 CEF UDP (1),最後按下 Lanuch new input (2)。

https://ithelp.ithome.com.tw/upload/images/20240917/20118848dJLruBfJUA.png
選擇 CEF UDP

進到 CEF UDP 輸入器設定畫面,以下有幾個需要設定的欄位:

  • Global:
    建議勾選,日後若建立為叢集模式後可以省下一些步驟。

  • Title:
    設定這個輸入器名稱,我個人的命名習慣為 cef_udp_35556。以底線分隔,第一欄是格式,第二欄協定,第三欄連接埠號,以後在檢視的時候就會清楚易懂。

  • Bind address:
    要在那一個 IP 上監聽,預設 0.0.0.0 表示監聽 Graylog 伺服器所有的 IP。

  • Port:
    要在那一個 Port 上監聽,請使用 1024 以上的數字,我個人習慣採用 35556。

https://ithelp.ithome.com.tw/upload/images/20240917/20118848IHDJVMbiDM.png
設定 CEF UDP

下方還有一些欄位,保持預設值即可,最後按下 Lanuch Input 後即是建立完成,回到輸入器清單後會多出一筆 cef_udp_35556 的輸入資訊區塊。

https://ithelp.ithome.com.tw/upload/images/20240917/20118848daL6TCqmb9.png
建立 CEF UDP 完成

如果 CEF UDP 輸入器正常監聽,會在名稱的後方顯示綠色區塊 1 RUNNING 的字樣表示正常,若顯示為橘色區塊 0 RUNNING 表示沒有正確啟動,通常原因是該連接埠已經被其它程式佔用,需要更換連接埠或將原本佔用的程式結束。

在右邊有一個 Network IO 的欄位,後方的數字會顯示最近每秒所收到的記錄容量,若確認有對這個輸入器傳送記錄但是數字沒有變化,需要檢查中間的網路連線狀況、網路設定,或者防火牆阻擋。

在數字後方的 total 則是顯示統計容量,它會記錄從這個輸入器啟動以來所收到的所有記錄容量進行統計,若輸入器有重新啟動過數字會歸零重新統計。


建立 Raw/Plaintext 輸入器

如果有裝置可以設定往遠端伺服器傳送記錄,但其記錄並非標準的 Syslog 或 CEF 時,請改用 Raw/Plaintext 輸入器,它將不會考慮從接收到的記錄中嘗試拆解出日期或其它欄位,而是將原始資料直接儲存起來。

除了來源格式的考量之外,有時出於測試是否裝置有傳送記錄出來的場景,也可以設定該裝置先傳送至 Raw/Plaintext 輸入器,確認能夠正確接收後再變更設定往預期的輸入器傳送。

至於 Log 記錄的時間則會以 Graylog 伺服器接收到的時間做為該筆記錄的時間戳記 (timestamp) 欄位儲存。

要建立 Raw/Plaintext 輸入器,請在輸入器管理頁左邊的下拉清單中選擇 Raw/Plaintext UDP (1),最後按下 Lanuch new input (2)。

https://ithelp.ithome.com.tw/upload/images/20240917/20118848OEMWNcCnK1.png
選擇 Raw/Plaintext UDP

進到 Raw/Plaintext UDP 輸入器設定畫面,以下有幾個需要設定的欄位:

  • Global:
    建議勾選,日後若建立為叢集模式後可以省下一些步驟。

  • Title:
    設定這個輸入器名稱,我個人的命名習慣為 raw_udp_35555。以底線分隔,第一欄是格式,第二欄協定,第三欄連接埠號,以後在檢視的時候就會清楚易懂。

  • Bind address:
    要在那一個 IP 上監聽,預設 0.0.0.0 表示監聽 Graylog 伺服器所有的 IP。

  • Port:
    要在那一個 Port 上監聽,請使用 1024 以上的數字,我個人習慣採用 35555。

https://ithelp.ithome.com.tw/upload/images/20240917/20118848WiS15sDee7.png
設定 Raw/Plaintext UDP

下方還有一些欄位,保持預設值即可,最後按下 Lanuch Input 後即是建立完成,回到輸入器清單後會多出一筆 raw_udp_35555 的輸入資訊區塊。

https://ithelp.ithome.com.tw/upload/images/20240917/20118848YAsQxbKFzL.png
建立 Raw/Plaintext UDP 完成

如果 Raw/Plaintext UDP 輸入器正常監聽,會在名稱的後方顯示綠色區塊 1 RUNNING 的字樣表示正常,若顯示為橘色區塊 0 RUNNING 表示沒有正確啟動,通常原因是該連接埠已經被其它程式佔用,需要更換連接埠或將原本佔用的程式結束。

在右邊有一個 Network IO 的欄位,後方的數字會顯示最近每秒所收到的記錄容量,若確認有對這個輸入器傳送記錄但是數字沒有變化,需要檢查中間的網路連線狀況、網路設定,或者防火牆阻擋。

在數字後方的 total 則是顯示統計容量,它會記錄從這個輸入器啟動以來所收到的所有記錄容量進行統計,若輸入器有重新啟動過數字會歸零重新統計。


建立 GELF 輸入器

GELF (Graylog Extended Log Format) 是由 Graylog 所定義的一種開放格式,其目的是為了解決過去 Log 記錄格式的幾種缺點:

  1. 記錄長度被限制為 1024 bytes,沒有足夠放置 payload 的空間
  2. 記錄中的內容都是字串,沒有辦法定義資料格式,例如數字、字串等類型的區別
  3. RFC 雖然有明確定義,但是各家廠商實作 Syslog 的方式略有差異,無法有一體適用的欄位拆解方法
  4. 無法做資料壓縮

因此,GELF 即是為了解決上述的問題而生,它不僅支援了切分區塊傳送以滿足大型記錄傳送的機制,而且採用的 JSON (JavaScript Object Notation) 格式也可以在附加值的時候分辨是字串或數字。

除了可以明文傳輸之外,為了節省資料傳輸量 GELF 也可以選擇 GZIP 或 ZLIB 兩種壓縮演算法。壓縮演算法由裝置端傳送時決定,Graylog 伺服器會自動判別無需選擇,若裝置端未宣告壓縮演算法,預設是採用 GZIP。

以下是一段符合 RFC 7159 標準 JSON 格式的 GELF 記錄內容:

{
  "version": "1.1",
  "host": "example.org",
  "short_message": "A short message that helps you identify what is going on",
  "full_message": "Backtrace here\n\nmore stuff",
  "timestamp": 1385053862.3072,
  "level": 1,
  "_user_id": 9001,
  "_some_info": "foo",
  "_some_env_var": "bar"
}

要建立 GELF 輸入器,請在輸入器管理頁左邊的下拉清單中選擇 GELF UDP (1),最後按下 Lanuch new input (2)。

https://ithelp.ithome.com.tw/upload/images/20240917/20118848qq1w4iGtJ1.png
選擇 GELF UDP

進到 GELF UDP 輸入器設定畫面,以下有幾個需要設定的欄位:

  • Global:
    建議勾選,日後若建立為叢集模式後可以省下一些步驟。

  • Title:
    設定這個輸入器名稱,我個人的命名習慣為 gelf_udp_32201。以底線分隔,第一欄是格式,第二欄協定,第三欄連接埠號,以後在檢視的時候就會清楚易懂。

  • Bind address:
    要在那一個 IP 上監聽,預設 0.0.0.0 表示監聽 Graylog 伺服器所有的 IP。

  • Port:
    要在那一個 Port 上監聽,請使用 1024 以上的數字,我個人習慣採用 32201。

https://ithelp.ithome.com.tw/upload/images/20240917/20118848KaHyvzml13.png
設定 GELF UDP

下方還有一些欄位,保持預設值即可,最後按下 Lanuch Input 後即是建立完成,回到輸入器清單後會多出一筆 gelf_udp_32201 的輸入資訊區塊。

https://ithelp.ithome.com.tw/upload/images/20240917/2011884821Rzq3eZgZ.png
建立 GELF UDP 完成

如果 GELF UDP 輸入器正常監聽,會在名稱的後方顯示綠色區塊 1 RUNNING 的字樣表示正常,若顯示為橘色區塊 0 RUNNING 表示沒有正確啟動,通常原因是該連接埠已經被其它程式佔用,需要更換連接埠或將原本佔用的程式結束。

在右邊有一個 Network IO 的欄位,後方的數字會顯示最近每秒所收到的記錄容量,若確認有對這個輸入器傳送記錄但是數字沒有變化,需要檢查中間的網路連線狀況、網路設定,或者防火牆阻擋。

在數字後方的 total 則是顯示統計容量,它會記錄從這個輸入器啟動以來所收到的所有記錄容量進行統計,若輸入器有重新啟動過數字會歸零重新統計。


參考資料


上一篇
Graylog 使用者介面
下一篇
Graylog 裝置端設定:Linux
系列文
突破困境:開源記錄收集與分析系統10
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言